package com.training1.core.common.enums;

import java.util.ArrayList;
import java.util.List;

import com.training1.core.common.global.Global;
import com.training1.core.common.utils.StringUtils;


public class EnumSupport {

	/** 不提供构造函数 */
	private EnumSupport() {
	}

	private static final String INNER_CLASS_SEPARATOR = "$";
	
	
	/**
	 * 根据枚举type和key取得枚举显示值
	 * 
	 * @param enumType
	 *            String
	 * @param enumKey
	 *            String
	 * @return String
	 */
	@SuppressWarnings("rawtypes")
	public static String getEnumLabel(String enumType, Integer enumKey,Class c) {
		for (Class cls : c.getClasses()) {
			String clsName = cls.getName();
			clsName = clsName.substring(clsName
					.lastIndexOf(INNER_CLASS_SEPARATOR) + 1);
			if (cls.isEnum() && StringUtils.equals(clsName, enumType)) {
				for (Object o : cls.getEnumConstants()) {
					IEnum enumTmp = (IEnum) o;
					if (enumKey == enumTmp.getCode()) {
						return enumTmp.getLabel();
					}
				}
			}
		}
		return "";
	}
	
	/**
	 * 根据枚举type和值取得枚举显示code
	 * 
	 * @param enumType
	 *            String
	 * @param enumLabel
	 *            String
	 * @return String
	 */
	@SuppressWarnings("rawtypes")
	public static Integer getEnumCode(String enumType, String enumLabel,Class c) {
		for (Class cls : c.getClasses()) {
			String clsName = cls.getName();
			clsName = clsName.substring(clsName
					.lastIndexOf(INNER_CLASS_SEPARATOR) + 1);
			if (cls.isEnum() && StringUtils.equals(clsName, enumType)) {
				for (Object o : cls.getEnumConstants()) {
					IEnum enumTmp = (IEnum) o;
					if (StringUtils.equals(enumLabel, enumTmp.getLabel())) {
						return enumTmp.getCode();
					}
				}
			}
		}
		return null;
	}

	/**
	 * 根据枚举type取得DropDownList
	 * 
	 * @param enumType
	 *            String
	 * @return String
	 */
	@SuppressWarnings("rawtypes")
	public static List<DropDownDto> getCommonDropDownList(String enumType,Class c) {
		List<DropDownDto> resultList = new ArrayList<DropDownDto>();
		for (Class cls : c.getClasses()) {
			String clsName = cls.getName();
			clsName = clsName.substring(clsName
					.lastIndexOf(INNER_CLASS_SEPARATOR) + 1);
			if (cls.isEnum() && StringUtils.equals(clsName, enumType)) {
				for (Object o : cls.getEnumConstants()) {
					IEnum enumTmp = (IEnum) o;
					DropDownDto dto = new DropDownDto();
					dto.setId(enumTmp.getCode());
					dto.setName(enumTmp.getLabel());
					resultList.add(dto);
				}
				return resultList;
			} else {
				continue;
			}
		}
		return resultList;
	}

	/**
	 * @description 根据枚举Type获得枚举下拉项的HTML字符串，如果传入的enumValue不为空，则默认显示该项
	 * @param enumType
	 * @param enumValue
	 * @return
	 */
	@SuppressWarnings("rawtypes")
	public static String getSelList(String enumType, String name, Integer enumValue,Class c){
		
		StringBuilder sb = new StringBuilder();
		
		for (Class cls : c.getClasses()) {
			String clsName = cls.getName();
			clsName = clsName.substring(clsName.lastIndexOf(INNER_CLASS_SEPARATOR) + 1);
			if (cls.isEnum() && StringUtils.equals(clsName, enumType)) {
				sb.append("<select class=\"select\" name=\"");
				sb.append(name);
				sb.append("\">");
				sb.append("<option value=\"\">"+ Global.getMessage("common.select.default")+"</option>");
				
				for (Object o : cls.getEnumConstants()) {
					IEnum enumTmp = (IEnum) o;
					
					sb.append("<option value=\"");
					sb.append(enumTmp.getCode()+"\"");
					
					// 判断enumValue是否为空
					if (enumValue != null && enumTmp.getCode().equals(enumValue)){
						sb.append("selected=\"selected\"");
					}
					sb.append(">");
					sb.append(enumTmp.getLabel()+"</option>");
					
				}
				sb.append("</select>");
				return sb.toString();
			} else {
				continue;
			}
		}
		return sb.toString();
	}
	
	
}